//
// Created by yongj on 2021/7/31.
//

#ifndef CAR_BALANCE_TYPES_H
#define CAR_BALANCE_TYPES_H

#define MOTOR_1_ID  0x201
#define MOTOR_2_ID  0x202

#define MOTOR_ANGLE_H   0
#define MOTOR_ANGLE_L   1
#define MOTOR_RPM_H     2
#define MOTOR_RPM_L     3
#define MOTOR_TORQUE_H  4
#define MOTOR_TORQUE_L  5

#define MAXCurrent  34000

/** \brief 电机PID设置
 * \param Kp,Ki,Kp PID参数
 * \param SetEncoder 设定编码器目标值
 * \param ActualEncoder 编码器实际值
 * \param err 偏差值
 * \param err_last 上次偏差值
 * \param err_lim 偏差极限值
 * \param integral 积分制
 * \param PWMSet 输出 PWM设置值
 * */
typedef struct {
    float Kp,Ki,Kd;
    int16_t setRPM;
    int16_t ActualRPM;
    int err;
    int err_last;
    int err_lim;
    int integral;
    int integral_lim;
    int16_t CurrentOUT;
} pid;

/** \brief 车轮运动参数
 * \param status 车轮运动状态 0停止 1运行
 * \param speed 车轮速度
 * */
typedef struct wheel{
    bool status;
    int16_t speed;
    int16_t angle;
    int16_t torque;
    pid motor_pid;
}wheel;

/** \brief 小车运动参数
 * \param status 小车运动状态 0停止 1运行
 * \param V 小车速度
 * \param Vx,Vy 小车X,Y轴速度
 * \param Vw 小车角速度 逆时针为正
 * \param angle 小车速度角度
 * */
typedef struct {
    bool status;
    int16_t V;
    float Vw;
    wheel Left;
    wheel Right;
}car_t;
#endif //CAR_BALANCE_TYPES_H
